﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Threading.Tasks;
using ModeloEntidades;


namespace AccesoDatos.DAO
{
    public class DAO_Profesional_colegio : DAO_Base
    {
        // Atributos de manejo de instancia (singleton)
        static DAO_Profesional_colegio instance = null;
        //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        // DAOs Relacionados
        private DAO_Titulos miDAO_Titulos = DAO_Titulos.Instance;
        //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        // Atributos para acceso a los DataSet Tipados        
        private Modelos.ModeloEntidades_externas.colegio_clientesDataTable colegio_clientes_Tabla = new Modelos.ModeloEntidades_externas.colegio_clientesDataTable();        
        private Modelos.ModeloEntidades_externasTableAdapters.colegio_clientesTableAdapter colegio_clientes_TableAdapter = new Modelos.ModeloEntidades_externasTableAdapters.colegio_clientesTableAdapter();
        
        public static DAO_Profesional_colegio Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new DAO_Profesional_colegio();
                        }
                    }
                }
                return instance;
            }
        }

        public DAO_Profesional_colegio()
        {
        }

        public List<Profecional_colegio> obtener(string nombres)
        {
            // Adaptamos parametro de entrada (para busqueda inexacta)
            nombres = nombres.ToUpper();      //  Todo a mayusculas              
            nombres = "%" + nombres + "%";    //  Le agregamos comodines de busqueda inexacta

            // Cargo los profesionales de la db de clientes del colegio
            colegio_clientes_Tabla = colegio_clientes_TableAdapter.obtener_por_nombres(nombres);                                   

            // Finalmente devuelvo la lista
            return recolectarMuchos();
        }


        private Profecional_colegio recolectarUno()
        {
            Profecional_colegio unProfecional = nuevoProfecional_inicializado();
            //---------------------------------------------------------------------------------
            unProfecional.matricula = colegio_clientes_Tabla[0].codigo;
            unProfecional.nombre = colegio_clientes_Tabla[0].nombres;
            unProfecional.dni = colegio_clientes_Tabla[0].nro_doc;
            unProfecional.eMail = colegio_clientes_Tabla[0].ema_partic;
            unProfecional.eMail_auxiliar = colegio_clientes_Tabla[0].e_mail;
            //---------------------------------------------------------------------------------
            unProfecional.vive.domicilio = colegio_clientes_Tabla[0].dom_partic;
            unProfecional.vive.Localidad.nombre = colegio_clientes_Tabla[0].loc_partic;
            unProfecional.vive.Localidad.Departamento.nombre = colegio_clientes_Tabla[0].dep_partic;
            //---------------------------------------------------------------------------------
            unProfecional.Titulos = miDAO_Titulos.obtener(colegio_clientes_Tabla[0].codigo);
            //---------------------------------------------------------------------------------

            return unProfecional;
        }

        private List<Profecional_colegio> recolectarMuchos()
        {
            // Creo la lista para recolectar y devolver
            List<Profecional_colegio> profesionales = new List<Profecional_colegio>();

            // Recorro los profesionales de la tabla
            foreach (Modelos.ModeloEntidades_externas.colegio_clientesRow unCliente_fila in colegio_clientes_Tabla)
            {
                Profecional_colegio nuevoProfesional = nuevoProfecional_inicializado();
                //--------------------------------------------------------------------------------
                nuevoProfesional.matricula = unCliente_fila.codigo;
                nuevoProfesional.nombre = unCliente_fila.nombres;
                nuevoProfesional.dni = unCliente_fila.nro_doc;
                nuevoProfesional.eMail = unCliente_fila.ema_partic;
                nuevoProfesional.eMail_auxiliar = unCliente_fila.e_mail;
                //---------------------------------------------------------------------------------
                nuevoProfesional.vive.domicilio = unCliente_fila.dom_partic;
                nuevoProfesional.vive.Localidad.nombre = unCliente_fila.loc_partic;
                nuevoProfesional.vive.Localidad.Departamento.nombre = unCliente_fila.dep_partic;
                //---------------------------------------------------------------------------------
                nuevoProfesional.Titulos = miDAO_Titulos.obtener(unCliente_fila.codigo);
                //---------------------------------------------------------------------------------
                profesionales.Add(nuevoProfesional); // Recolectamos en la lista
            }

            return profesionales;
        }

        private Profecional_colegio nuevoProfecional_inicializado()
        {
            //---------------------------------------------------------------------------
            Profecional_colegio nuevoProfesional = new Profecional_colegio();
            //---------------------------------------------------------------------------
            nuevoProfesional.vive = new Lugar();
            nuevoProfesional.vive.Localidad = new Localidad();
            nuevoProfesional.vive.Localidad.Departamento = new Departamento();
            //---------------------------------------------------------------------------
            return nuevoProfesional;
        }

    }

}
